package com.guowen.myaccount.utils;

import android.inputmethodservice.Keyboard;
import android.inputmethodservice.KeyboardView;
import android.text.Editable;
import android.text.InputType;
import android.view.View;
import android.widget.EditText;

import com.guowen.myaccount.R;


public class KeyBoardUtils {
    private final Keyboard k1;
    private KeyboardView keyboardView;
    private EditText editText;
    private int type;

    //点击确定时的接口回调
    public interface OnEnsureListener{
        public void onEnsure(int Type);
    }
    OnEnsureListener onEnsureListener;
    public void setOnEnsureListener(OnEnsureListener onEnsureListener) {
        this.onEnsureListener = onEnsureListener;
    }

    public KeyBoardUtils(KeyboardView keyboardView, EditText editText, int type) {
        this.keyboardView = keyboardView;
        this.editText = editText;
        this.editText.setInputType(InputType.TYPE_NULL); //取消弹出系统键盘
        this.type = type;
        k1 = new Keyboard(this.editText.getContext(), R.xml.key);

        this.keyboardView.setKeyboard(k1); //设置要显示的样式
        this.keyboardView.setEnabled(true);
        this.keyboardView.setPreviewEnabled(false);
        //设置键盘按钮被点击了的监听
        this.keyboardView.setOnKeyboardActionListener(new KeyboardView.OnKeyboardActionListener() {
            @Override
            public void onPress(int primaryCode) {
            }
            @Override
            public void onRelease(int primaryCode) {
            }

            @Override
            public void onKey(int primaryCode, int[] keyCodes) {
                Editable editable = editText.getText();
                int start = editText.getSelectionStart();
                switch (primaryCode){
                    case Keyboard.KEYCODE_DELETE: //点击了删除键
                        if (editable != null && editable.length() > 0) {
                            if (start>0) {
                                editable.delete(start-1,start);
                            }
                        }
                        break;
                    case Keyboard.KEYCODE_CANCEL: //点击了清零
                        editable.clear();
                        break;
                    case Keyboard.KEYCODE_DONE: //点击确定
                        onEnsureListener.onEnsure(type); //通过接口回调的方法，当点击确定可以调用这个方法
                        break;
                    default: //其他数字直接插入
                        editable.insert(start,Character.toString((char)primaryCode));
                        break;
                }

            }
            @Override
            public void onText(CharSequence text) {
            }
            @Override
            public void swipeLeft() {
            }
            @Override
            public void swipeRight() {
            }
            @Override
            public void swipeDown() {
            }
            @Override
            public void swipeUp() {
            }
        });
    }

    // 显示键盘
    public void showKeyboard(){
        int visibility = keyboardView.getVisibility();
        if (visibility == View.INVISIBLE || visibility == View.GONE) {
            keyboardView.setVisibility(View.VISIBLE);
        }
    }

    // 隐藏键盘
    public void hideKeyboard(){
        int visibility = keyboardView.getVisibility();
        if (visibility == View.VISIBLE || visibility == View.INVISIBLE) {
            keyboardView.setVisibility(View.GONE);
        }
    }
}
